home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 2 / Tech Arsenal 2 (Arsenal Computer).iso / clipper / s93bsp.exe / S87 / INV00.PRG < prev    next >
Encoding:
Text File  |  1993-11-12  |  13.5 KB  |  515 lines

  1. procedure INVMAIN
  2. *       I N V 0 0
  3. *       Main controlling routine for Invoices
  4. private INVCOM, PINVNO
  5. store 0 to PINVNO, INVCOM
  6.  
  7. select 0
  8. use INVOICE index INVNUM alias INVOICE
  9. select 0
  10. use PARTS index PARTINV
  11. select 0
  12. use PARTLINE
  13. set deleted on
  14. QBCHOICE = 1
  15. do INVSAY with .f.
  16.  
  17. do while .t.
  18.  
  19.     INVCLEAR()
  20.     do INVGET with .f.
  21.     select PARTLINE
  22.     zap
  23.     do PARTSHOW with 15,1,10
  24.     select INVOICE
  25.     do INVTOT
  26.     INVCOM = QBPROMPT("Add|Edit|Delete|Print|Quit|","Add a new invoice, or Fetch existing")
  27.  
  28.     PINVNO = MINVNO
  29.     do case
  30.     case INVCOM=1                  && Add
  31.         MEDITING = .f.
  32.         do INVEDIT with 0
  33.     case INVCOM=2                  && Edit
  34.         INVFIND(.t.)
  35.         if MINVNO>0
  36.             MEDITING = .t.
  37.             PINVNO = MINVNO
  38.             do INVEDIT with PINVNO
  39.         endif
  40.     case INVCOM=3                  && Delete
  41.         INVFIND(.f.)
  42.         if MINVNO>0
  43.             PINVNO = MINVNO
  44.             do INVDEL with PINVNO
  45.         endif
  46.     case INVCOM=4                  && Print
  47.         INVFIND(.f.)
  48.         if MINVNO>0
  49.             PINVNO = MINVNO
  50.             do INVOUT with PINVNO
  51.         endif
  52.     case INVCOM=5 .or. INVCOM=0
  53.         exit
  54.     endcase
  55.     QBCHOICE = 4
  56. enddo
  57. close database
  58.  
  59. return
  60.  
  61. ******************************************************************
  62.  
  63. procedure INVEDIT
  64. *   I N V E D I T
  65. parameters PINVNO
  66. private IACTION, EACTION, INVSTAT, DEFCOM
  67.  
  68. select INVOICE
  69. INVSTAT = 0
  70. if PINVNO=0
  71.     MINVNO = INVADD(0)
  72.     IACTION = 99
  73.     EACTION = 1
  74. else
  75.     IACTION = 2
  76.     EACTION = 0
  77. endif
  78. if MINVNO=0
  79.     return
  80. endif
  81. DEFCOM = 4
  82. do while .t.
  83.  
  84. *   Get headers etc
  85.     SINVNO()
  86.     if IACTION=0
  87.         IACTION = QBPROMPT("Save|Edit|Abandon|Print|Renumber|Quit|","Actions on this Invoice, Exit",DEFCOM)
  88.         DEFCOM = IACTION
  89.     endif
  90.  
  91.     do case
  92.     case IACTION=1
  93.         INVSTAT = INVSAVE()
  94.         store 0 to IACTION, EACTION
  95.         DEFCOM = 6
  96.     case IACTION=2
  97.         EACTION = QBPROMPT("Owner|Credit terms|Insurance/Labour|Vehicle/Dates|Parts/Paint etc|Quit|",;
  98.                   "Select Invoice area to update",EACTION+1)
  99.         INVSTAT = 1
  100.         DEFCOM = 1
  101.     case IACTION=3
  102.         INVSTAT = INVFILL(.t.)
  103.         do INVGET with .f.
  104.         do PARTSHOW with 15,1,10
  105.         do INVTOT
  106.         store 0 to IACTION, EACTION
  107.         if MINVNO=0
  108.            do QBMESS with "Invoice not present in Database - returning",colflash,5
  109.            return
  110.         endif
  111.     case IACTION=4
  112.         do INVOUT with (MINVNO)
  113.         store 0 to IACTION, EACTION
  114.     case IACTION=5
  115.         do INVREN
  116.         store 0 to IACTION, EACTION
  117.     case IACTION=6 .or. IACTION=0       && MIB 23/10/90
  118.         if INVSTAT=1 .and. MINVTOTAL>0
  119.             do QBMESS with "Invoice changed - Save or Abandon first",colhead,5
  120.             store 0 to IACTION, EACTION
  121.         else
  122.             do invclear                && MIB 23/10/90
  123.             do INVSAY with .f.
  124.             exit
  125.         endif
  126.     endcase
  127.  
  128.     GETOUT = .f.
  129.     do case
  130.     case EACTION=1             && Owner
  131.         do INVGET with .t.
  132.         IACTION = 2            && Get back to the right menu in Add mode
  133.     case EACTION=2             && Payment
  134.         do INVPAY with .t.
  135.     case EACTION=3             && Insurance/Labour
  136.         do INVINSLB with .t.
  137.     case EACTION=4             && Vehicle
  138.         do INVVEH with .t.
  139.     case EACTION=5             && Parts
  140.         do PARTEDIT with 15,1,10,PINVNO
  141.         do PARTSHOW with 15,1,10
  142.     endcase
  143.     do INVTOT
  144.  
  145.     if GETOUT .or. EACTION=6 .or. EACTION=0
  146.         store 0 to IACTION, EACTION
  147.     endif
  148. enddo
  149.  
  150. return
  151.  
  152. ******************************************************************
  153.  
  154. function INVFILL
  155. parameters DOPART
  156. *       I N V F I L L
  157.  
  158. MINVNO     = INVOICE->INVNO
  159. MSPEEDO    = INVOICE->SPEEDO
  160. MFUEL      = INVOICE->FUEL
  161. MPARTDISC  = INVOICE->PARTDISC
  162. MVATRATE   = INVOICE->VATRATE
  163. MOWNNAME   = INVOICE->OWNNAME
  164. MOWNINIT   = INVOICE->OWNINIT
  165. MOWNADD1   = INVOICE->OWNADD1
  166. MOWNADD2   = INVOICE->OWNADD2
  167. MOWNADD3   = INVOICE->OWNADD3
  168. MMAKEMODEL = INVOICE->MAKEMODEL
  169. MINSCO     = INVOICE->INSCO
  170. MINSADD1   = INVOICE->INSADD1
  171. MINSADD2   = INVOICE->INSADD2
  172. MINSENG    = INVOICE->INSENG
  173. MINSTEL    = INVOICE->INSTEL
  174. MPAINT     = INVOICE->PAINT
  175. MTRIM      = INVOICE->TRIM
  176. MOWNTELH   = INVOICE->OWNTELH
  177. MOWNTELB   = INVOICE->OWNTELB
  178. MOWNVAT    = INVOICE->OWNVAT
  179. MINSTOPAY  = INVOICE->INSTOPAY
  180. MACTYPE    = INVOICE->ACTYPE
  181. MWORKTYPE  = INVOICE->WORKTYPE
  182. MDATEIN    = INVOICE->DATEIN
  183. MDATEOUT   = INVOICE->DATEOUT
  184. MDATEINV   = INVOICE->DATEINV
  185. MREGNO     = INVOICE->REGNO
  186. MYEAR      = INVOICE->YEAR
  187. MENGNO     = INVOICE->ENGNO
  188. MCHASNO    = INVOICE->CHASNO
  189. MESTNO     = INVOICE->ESTNO
  190. MLABESTNO  = INVOICE->LABESTNO
  191. MCLAIMNO   = INVOICE->CLAIMNO
  192. MLABOUR1   = INVOICE->LABOUR1
  193. MLABOUR2   = INVOICE->LABOUR2
  194. MLABOUR3   = INVOICE->LABOUR3
  195. MLABOUR4   = INVOICE->LABOUR4
  196. MLABOURT   = INVOICE->LABOURT
  197. MINSLAB    = INVOICE->INSLAB
  198. MOWNLAB    = INVOICE->OWNLAB
  199. MINSPART   = INVOICE->INSPART
  200. MOWNPART   = INVOICE->OWNPART
  201. MINSSPEC   = INVOICE->INSSPEC
  202. MOWNSPEC   = INVOICE->OWNSPEC
  203. MINSAMT    = INVOICE->INSAMT
  204. MOWNAMT    = INVOICE->OWNAMT
  205. MEXCESS    = INVOICE->EXCESS
  206. MCONTRIB   = INVOICE->CONTRIB
  207. MINSDUE    = INVOICE->INSDUE
  208. MOWNDUE    = INVOICE->OWNDUE
  209. MINVTOTAL  = INVOICE->INVTOTAL
  210. MCUSTTYP   = INVOICE->CUSTTYPE
  211. ML2TEXT    = INVOICE->L2TEXT
  212. ML3TEXT    = INVOICE->L3TEXT
  213. ML4TEXT    = INVOICE->L4TEXT
  214.  
  215. if DOPART
  216.     PSTAT = PARTLOAD(MINVNO)
  217. endif
  218. return iif(MINVNO=0,0,2)
  219.  
  220. ******************************************************************
  221.  
  222. function INVCLEAR
  223.  
  224. *       I N V C L E A R
  225. private OLDINVNO
  226. OLDINVNO = MINVNO
  227.  
  228. store 0 to MINVNO, MSPEEDO, MFUEL, MPARTDISC
  229. store 0.00 to MLABOUR1, MLABOUR2, MLABOUR3, MLABOUR4, MLABOURT, MINSLAB, MOWNLAB, MINSPART, MOWNPART
  230. store 0.00 to MINSSPEC, MOWNSPEC, MINSAMT, MOWNAMT, MEXCESS, MCONTRIB, MINSDUE, MOWNDUE, MINVTOTAL
  231. store 0.00 TO IPDSCNT, OPDSCNT, ISUBTOT, OSUBTOT, IVATAMT, OVATAMT, INSSUB, OWNSUB
  232. MVATRATE = QBVAT
  233.  
  234. store space(30) to MOWNADD1, MOWNADD2, MOWNADD3, MMAKEMODEL, MINSCO, MINSADD1, MINSADD2, MINSENG, MINSTEL
  235. store space(30) to ML2TEXT, ML3TEXT, ML4TEXT, MENGNO, MCHASNO
  236. store space(24) to MOWNNAME
  237. store space(15) to MCLAIMNO
  238. store space(12) to MPAINT, MTRIM
  239. store space(12) to MOWNTELH, MOWNTELB, MESTNO, MLABESTNO
  240. store space(8)  to MREGNO
  241. store space(7)  to MYEAR
  242. store space(6)  to MOWNINIT
  243. store space(4)  to MCUSTTYP
  244. store space(1)  to MACTYPE, MWORKTYPE
  245.  
  246. store .f. to MOWNVAT, MINSTOPAY
  247.  
  248. store date() to MDATEIN
  249. store ctod("") to MDATEOUT, MDATEINV
  250.  
  251. return (OLDINVNO)
  252.  
  253. ******************************************************************
  254.  
  255. function INVADD
  256. *       get a new invoice number
  257. parameters NEWINV
  258. private INVACT
  259. parameters NEWINV
  260. GETOUT = .f.
  261.  
  262. select PARTLINE
  263. zap
  264. select INVOICE
  265. INVACT = QBPROMPT("Automatic|Manual|","Choose Method of generating new Invoice - ESC to Quit",1)
  266. do case
  267. case INVACT=0 .or. GETOUT
  268.     return 0
  269. case INVACT=1
  270. *   Get new Invoice number
  271.     AUTOADD = .t.
  272.     do INVNEW with .f.
  273. case INVACT=2
  274.     @ 2,73 get MINVNO picture "99999" valid NEWNUM(.t.)
  275.     do QBREAD with "Input new Invoice number","It must not already exist"
  276.     AUTOADD = .f.
  277.     if GETOUT
  278.         MINVNO =  0
  279.     endif
  280. endcase
  281.  
  282. MINVNO = INVCLEAR()
  283. return  (MINVNO)
  284.  
  285. ******************************************************************
  286.  
  287. function INVSAVE
  288.  
  289. *       I N V S A V E
  290. private PINVNO, GO_REC
  291. select INVOICE
  292. use INVOICE
  293. set softseek off
  294. set index to INVNUM, INVDATE, INVCUST, INVNAME
  295. seek str(MINVNO,5)
  296. if eof()
  297.     if AUTOADD
  298.         do INVNEW with .t.
  299.     endif
  300.     select INVOICE
  301.     go top
  302.     if INVOICE->INVNO<>0 .or. reccount()=0
  303.         do QBADBLNK with 10
  304.         go top
  305.     endif
  306.  
  307. endif
  308.  
  309. replace INVOICE->INVNO with MINVNO, INVOICE->SPEEDO with MSPEEDO, INVOICE->FUEL with MFUEL, INVOICE->PARTDISC with MPARTDISC
  310. replace INVOICE->VATRATE with MVATRATE, INVOICE->OWNNAME with MOWNNAME, INVOICE->OWNADD1 with MOWNADD1, INVOICE->OWNADD2 with MOWNADD2
  311. replace INVOICE->OWNADD3 with MOWNADD3, INVOICE->MAKEMODEL with MMAKEMODEL, INVOICE->INSCO with MINSCO, INVOICE->INSADD1 with MINSADD1
  312. replace INVOICE->INSADD2 with MINSADD2, INVOICE->INSENG with MINSENG, INVOICE->INSTEL with MINSTEL, INVOICE->PAINT with MPAINT
  313. replace INVOICE->OWNTELH with MOWNTELH, INVOICE->OWNTELB with MOWNTELB, INVOICE->OWNVAT with MOWNVAT, INVOICE->INSTOPAY with MINSTOPAY
  314. replace INVOICE->ACTYPE with MACTYPE, INVOICE->WORKTYPE with MWORKTYPE, INVOICE->TRIM with MTRIM
  315. replace INVOICE->DATEIN with MDATEIN, INVOICE->DATEOUT with MDATEOUT, INVOICE->DATEINV with MDATEINV
  316. replace INVOICE->REGNO with MREGNO, INVOICE->YEAR with MYEAR, INVOICE->ENGNO with MENGNO
  317. replace INVOICE->CHASNO with MCHASNO, INVOICE->ESTNO with MESTNO, INVOICE->LABESTNO with MLABESTNO, INVOICE->CLAIMNO with MCLAIMNO
  318. replace INVOICE->LABOUR1 with MLABOUR1, INVOICE->LABOUR2 with MLABOUR2, INVOICE->LABOUR3 with MLABOUR3, INVOICE->LABOUR4 with MLABOUR4
  319. replace INVOICE->LABOURT with MLABOURT, INVOICE->INSLAB with MINSLAB, INVOICE->OWNLAB with MOWNLAB, INVOICE->INSPART with MINSPART
  320. replace INVOICE->OWNPART with MOWNPART, INVOICE->INSSPEC with MINSSPEC, INVOICE->OWNSPEC with MOWNSPEC, INVOICE->INSAMT with MINSAMT
  321. replace INVOICE->OWNAMT with MOWNAMT, INVOICE->EXCESS with MEXCESS, INVOICE->CONTRIB with MCONTRIB, INVOICE->INSDUE with MINSDUE
  322. replace INVOICE->OWNDUE with MOWNDUE, INVOICE->INVTOTAL with MINVTOTAL
  323. replace INVOICE->CUSTTYPE with MCUSTTYP, INVOICE->OWNINIT with MOWNINIT
  324. replace INVOICE->L2TEXT with ML2TEXT, INVOICE->L3TEXT with ML3TEXT, INVOICE->L4TEXT with ML4TEXT
  325. GO_REC = recno()
  326. set index to INVNUM
  327. go GO_REC
  328.  
  329. *       Partline save goes in here
  330. PINVNO = MINVNO
  331. do PARTSAVE with PINVNO
  332.  
  333. select INVOICE
  334.  
  335. return iif(MINVNO=0,0,2)
  336.  
  337. ******************************************************************
  338.  
  339. function INVFIND
  340. parameters OKNEW
  341. private ISTAT
  342. ISTAT = 0
  343. GETOUT = .f.
  344.  
  345. MINVNO = GINVNO(OKNEW)
  346.  
  347. if MINVNO<>0
  348.     SINVNO()
  349.     ISTAT = INVFILL(.t.)
  350.     do INVGET with .f.
  351.     do PARTSHOW with 15,1,10
  352.     do INVTOT
  353. endif
  354.  
  355. return ISTAT
  356.  
  357. ******************************************************************
  358.  
  359. procedure INVDEL
  360. parameters PINVNO
  361.  
  362. if QBYESNO("Delete this Invoice?")="Y"
  363.     select INVOICE
  364.     set index to INVNUM, INVDATE, INVCUST, INVNAME
  365.     seek str(PINVNO,5)
  366.     if found()
  367.         do QBWIPE
  368.         do PARTDEL with PINVNO
  369.         INVCLEAR()
  370.     endif
  371.     set index to INVNUM
  372. else
  373.     do QBMESS with "Invoice retained",COLFLASH,5
  374. endif
  375.  
  376. RETURN
  377.  
  378. ******************************************************************
  379.  
  380. procedure INVTOTAL
  381. parameters DOPART
  382. *   Sum of the parts
  383. *   Sum of specialist
  384. if DOPART
  385.     select PARTLINE
  386.     if reccount()>0
  387.         set deleted on
  388.         sum TPRICE to SUMPART && for PARTSPEC="P" .or. PARTSPEC=" "
  389.     else
  390.         store 0 to SUMPART    &&, SUMSPEC
  391.     endif
  392.     if MINSTOPAY
  393.         MINSPART = SUMPART
  394.         store 0 to MOWNPART, MOWNSPEC
  395.     else
  396.         MOWNPART = SUMPART
  397.         store 0 to MINSPART, MINSSPEC
  398.     endif
  399.     select INVOICE
  400. endif
  401.  
  402.  
  403. if MINSTOPAY
  404.     store 0 to MOWNLAB, MOWNPART, MOWNSPEC, OSUBTOT, OPDSCNT, MOWNAMT
  405.     MINSLAB = MLABOURT
  406.     MINSAMT = MINSLAB + MINSPART + MINSSPEC
  407.     IPDSCNT = MINSPART * MPARTDISC / 100
  408.     ISUBTOT = MINSAMT - IPDSCNT
  409.     if MOWNVAT
  410.         IVATAMT = 0
  411.         OVATAMT = ISUBTOT * (MVATRATE / 100)
  412.     else
  413.         IVATAMT = ISUBTOT * (MVATRATE / 100)
  414.         OVATAMT = 0
  415.     endif
  416.     INSSUB  = ISUBTOT + IVATAMT
  417.     MINSDUE = max((INSSUB - MEXCESS - MCONTRIB),0)  
  418.     OWNSUB = min(MEXCESS + MCONTRIB,ISUBTOT)
  419.     MOWNDUE = OVATAMT + OWNSUB
  420. else
  421.     store 0 to MINSLAB, MINSPART, MINSSPEC, MCONTRIB, MEXCESS, ISUBTOT, IPDSCNT, MINSDUE, MINSAMT, INSSUB
  422.     MOWNLAB = MLABOURT
  423.     MOWNAMT = MOWNLAB + MOWNPART + MOWNSPEC
  424.     OPDSCNT = MOWNPART * MPARTDISC / 100
  425.     OSUBTOT = MOWNAMT - OPDSCNT
  426.     OVATAMT = OSUBTOT * (MVATRATE / 100)
  427.     OWNSUB = OSUBTOT
  428.     MOWNDUE = OSUBTOT + OVATAMT
  429. endif
  430.  
  431. return
  432.  
  433. **************************************************************
  434.  
  435. procedure INVREN
  436. *   Renumber an Invoice
  437. private OLDNUM, GO_REC
  438. OLDNUM = MINVNO
  439. store 0 to MINVNO
  440.  
  441. do QBCLMESS
  442. select INVOICE
  443.  
  444. @ 2,0 say "Old Invoice number: "+str(OLDNUM,5)
  445. @ 2,53 say "New invoice number: "
  446. do while .t.
  447.     @ 2,73 get MINVNO picture "99999" valid NEWNUM(.t.)
  448.     do QBREAD with "Input NEW Invoice number",""
  449.     if GETOUT
  450.         MINVNO = OLDNUM
  451.         return
  452.     endif
  453.     if QBYESNO("New Number OK?")="Y"
  454.         exit
  455.     endif
  456. enddo
  457.  
  458. *   renumber the Invoice
  459.  
  460. do QBMESS with "Renumbering Invoice and Parts",colflash,0
  461.  
  462. GO_REC = recno()
  463. set index to INVNUM, INVDATE, INVCUST, INVNAME
  464. seek str(OLDNUM,5)
  465. if .not. eof()
  466.     replace INVOICE->INVNO with MINVNO
  467. endif
  468. set index to INVNUM
  469. go GO_REC
  470.  
  471. *    do the  Parts (like delete)
  472. select PARTS
  473. seek str(OLDNUM,5)
  474. do while .not. eof()
  475.     replace PARTS->INVNO with MINVNO
  476.     seek str(OLDNUM,5)
  477. enddo
  478.  
  479. select partline
  480. replace INVNO with MINVNO all
  481.  
  482. do QBCLMESS
  483. @ 2,0 clear to 2,79
  484. @ 02,61 say "Invoice no:"
  485. @ 2, 73 say MINVNO picture "99999"
  486.  
  487. return
  488.  
  489. **************************************************************
  490.  
  491. procedure INVNEW
  492. parameters DOIT
  493.  
  494. select 0
  495. use QBINFO index QBINFO
  496. seek "LASTINV"
  497. if DOIT
  498.     replace QBTEXT with str(MINVNO,5)
  499. else
  500.     if found()
  501.        MINVNO = val(trim(QBTEXT)) + 1
  502.        do while .not. NEWNUM(.f.)
  503.             MINVNO = MINVNO + 1
  504.        enddo
  505.     else
  506.        MINVNO = 1000
  507.        append blank
  508.        replace QBINFKEY with "LASTINV"
  509.     endif
  510. endif
  511. use
  512.  
  513. return
  514.  
  515.